package org.capgemini.tienda.actions;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.capgemini.tienda.forms.ProductoForm;
import org.capgemini.tienda.service.ProductosDelegateImpl;
import org.capgemini.tienda.service.TiendaDelegateFactory;
import org.capgemini.tienda.service.UsuariosDelegateImpl;
import org.capgemini.tienda.utils.ContextKeys;
import org.capgemini.tienda.utils.RequestKeys;
import org.capgemini.tienda.vo.ProductoVO;

public class AdminAction extends DispatchAction{

	public ActionForward add(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		final ServletContext context=request.getSession().getServletContext();
		
		ProductosDelegateImpl productosDelegateImpl=(ProductosDelegateImpl) context.getAttribute(ContextKeys.PRODUCTOS_DELEGATE);
		if(productosDelegateImpl==null){
			productosDelegateImpl=(ProductosDelegateImpl) TiendaDelegateFactory.getProductosDelegate();
			context.setAttribute(ContextKeys.PRODUCTOS_DELEGATE, productosDelegateImpl);
		}

  	  	ProductoVO producto=new ProductoVO();
		
  	  	ProductoForm productoForm = (ProductoForm) form;
  	  	
  	  	producto.setNombre(productoForm.getNombre());
  	  	producto.setDescripcion(productoForm.getDescripcion());
  	  	producto.setPrecioBase(Double.parseDouble(productoForm.getPrecioBase()));
  	  	producto.setImagenURL(productoForm.getImagenURL());
  	  	
		
		productosDelegateImpl.addProducto(producto);
//		request.setAttribute(RequestKeys.ID_PRODUCTO, producto.getIdProducto());
		
		return mapping.findForward("add");
	}
	
	public ActionForward borrar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		final ServletContext context=request.getSession().getServletContext();
		
		ProductosDelegateImpl productosDelegateImpl=(ProductosDelegateImpl) context.getAttribute(ContextKeys.PRODUCTOS_DELEGATE);
		if(productosDelegateImpl==null){
			productosDelegateImpl=ProductosDelegateImpl.getInstance();
			context.setAttribute(ContextKeys.PRODUCTOS_DELEGATE, productosDelegateImpl);
		}
		
		String idProducto = request.getParameter(RequestKeys.ID_PRODUCTO);
		productosDelegateImpl.borrarProducto(idProducto);
		
		return mapping.findForward("borrar");
	}
	
	public ActionForward update(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		final ServletContext context=request.getSession().getServletContext();
		
		ProductosDelegateImpl productosDelegateImpl=(ProductosDelegateImpl) context.getAttribute(ContextKeys.PRODUCTOS_DELEGATE);
		if(productosDelegateImpl==null){
			productosDelegateImpl=(ProductosDelegateImpl) TiendaDelegateFactory.getProductosDelegate();
			context.setAttribute(ContextKeys.PRODUCTOS_DELEGATE, productosDelegateImpl);
		}
		
		ProductoVO producto=new ProductoVO();
		
		ProductoForm productoForm = (ProductoForm) form;
  	  	
  	  	producto.setNombre(productoForm.getNombre());
  	  	producto.setDescripcion(productoForm.getDescripcion());
  	  	producto.setPrecioBase(Double.parseDouble(productoForm.getPrecioBase()));
  	  	producto.setImagenURL(productoForm.getImagenURL());
  	  	producto.setIdProducto(productoForm.getIdProducto());

  	  	System.out.println(productoForm.getNombre()+" "+productoForm.getIdProducto());
		
		productosDelegateImpl.updateProducto(producto);
		
		request.setAttribute(RequestKeys.PRODUCTO, producto);
		request.setAttribute(RequestKeys.ID_PRODUCTO, producto.getIdProducto());
		return mapping.findForward("update");
	}
	
	public ActionForward listadoUsuarios(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		UsuariosDelegateImpl usuariosDelegateImpl=(UsuariosDelegateImpl) TiendaDelegateFactory.getUsuariosDelegate();
		
		request.setAttribute(RequestKeys.LISTA_USUARIOS, usuariosDelegateImpl.getListaUsuarios());
		return mapping.findForward("listadoUsuarios");
	}
	
	public ActionForward adminOn(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		String userName = request.getParameter(RequestKeys.USERNAME);
		
		UsuariosDelegateImpl usuariosDelegateImpl=(UsuariosDelegateImpl) TiendaDelegateFactory.getUsuariosDelegate();

		
		usuariosDelegateImpl.changeRole(userName, "administrador");
		request.setAttribute(RequestKeys.LISTA_USUARIOS, usuariosDelegateImpl.getListaUsuarios());

		return mapping.findForward("listadoUsuarios");
	}
	
	public ActionForward adminOff(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		String userName = request.getParameter(RequestKeys.USERNAME);
		UsuariosDelegateImpl usuariosDelegateImpl=(UsuariosDelegateImpl) TiendaDelegateFactory.getUsuariosDelegate();
		
		usuariosDelegateImpl.changeRole(userName, "cliente");
		request.setAttribute(RequestKeys.LISTA_USUARIOS, usuariosDelegateImpl.getListaUsuarios());

		return mapping.findForward("listadoUsuarios");
	}
	
	public ActionForward detalleUsuario(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {

		UsuariosDelegateImpl usuariosDelegateImpl=(UsuariosDelegateImpl) TiendaDelegateFactory.getUsuariosDelegate();
		
		String idUsuario;
		if(request.getParameter(RequestKeys.ID_USUARIO)==null){
			idUsuario=(String) request.getAttribute(RequestKeys.ID_USUARIO);
		}
		else{
			idUsuario=request.getParameter(RequestKeys.ID_USUARIO);
		}
		
		request.setAttribute(RequestKeys.USUARIO, usuariosDelegateImpl.detalleUsuario(idUsuario));
		return mapping.findForward("detalleUsuario");
	}
}
